μΌλ°μ μΈ μννΈμ¨μ΄ μ€κ³ λ¬Έμ μ λν μ¬μ¬μ© κ°λ₯ν μ루μ μΈ λμμΈ ν¨ν΄μ μΈκ³λ₯Ό ννν΄ λ³΄μΈμ. μ½λ νμ§, μ μ§λ³΄μμ±, νμ₯μ±μ ν₯μμν€λ λ°©λ²μ λ°°μ보μΈμ.
λμμΈ ν¨ν΄: μ°μν μννΈμ¨μ΄ μν€ν μ²λ₯Ό μν μ¬μ¬μ© κ°λ₯ν μ루μ
μννΈμ¨μ΄ κ°λ° μμμμ λμμΈ ν¨ν΄μ μΌλ°μ μΌλ‘ λ°μνλ λ¬Έμ μ λν μ¬μ¬μ© κ°λ₯ν ν΄κ²°μ± μ μ 곡νλ©°, μλ§μ μνμ°©μ€λ₯Ό κ±°μ³ κ²μ¦λ μ²μ¬μ§ μν μ ν©λλ€. μ΄λ μμ λ κ°μ μ€μ μ μ©μ ν΅ν΄ λ€λ¬μ΄μ§ λͺ¨λ² μ¬λ‘μ μ§ν©μ²΄λ‘μ, νμ₯ κ°λ₯νκ³ μ μ§λ³΄μκ° μ©μ΄νλ©° ν¨μ¨μ μΈ μννΈμ¨μ΄ μμ€ν μ ꡬμΆνκΈ° μν κ²¬κ³ ν νλ μμν¬λ₯Ό μ 곡ν©λλ€. μ΄ κΈμμλ λμμΈ ν¨ν΄μ μΈκ³λ₯Ό κΉμ΄ νκ³ λ€μ΄, λ€μν νλ‘κ·Έλλ° νκ²½μμ κ·Έ μ΄μ , λΆλ₯, κ·Έλ¦¬κ³ μ€μ μ μ© μ¬λ‘λ₯Ό μ΄ν΄λ΄ λλ€.
λμμΈ ν¨ν΄μ΄λ 무μμΈκ°?
λμμΈ ν¨ν΄μ 볡μ¬ν΄μ λΆμ¬λ£μ μ μλ μ½λ μ‘°κ°μ΄ μλλλ€. λμ , λ°λ³΅μ μΌλ‘ λ°μνλ μ€κ³ λ¬Έμ μ λν μΌλ°νλ μ€λͺ μ λλ€. λμμΈ ν¨ν΄μ κ°λ°μλ€ μ¬μ΄μ 곡ν΅λ μ΄νμ 곡μ λ μ΄ν΄λ₯Ό μ 곡νμ¬ λ ν¨κ³Όμ μΈ μμ¬μν΅κ³Ό νμ μ κ°λ₯νκ² ν©λλ€. μννΈμ¨μ΄μ μν€ν μ² ν νλ¦Ώμ΄λΌκ³ μκ°νλ©΄ λ©λλ€.
λ³Έμ§μ μΌλ‘ λμμΈ ν¨ν΄μ νΉμ λ§₯λ½ μμμ μ€κ³ λ¬Έμ μ λν ν΄κ²°μ± μ ꡬ체νν©λλ€. μ΄λ λ€μμ μ€λͺ ν©λλ€:
- λ€λ£¨κ³ μ νλ λ¬Έμ .
- λ¬Έμ κ° λ°μνλ λ§₯λ½.
- μ°Έμ¬νλ κ°μ²΄μ κ·Έ κ΄κ³λ₯Ό ν¬ν¨ν ν΄κ²°μ± .
- μ₯λ¨μ κ³Ό μ μ¬μ μ΄μ μ ν¬ν¨ν ν΄κ²°μ± μ μ©μ κ²°κ³Ό.
μ΄ κ°λ μ 'GoF(Gang of Four)' β μ리ν κ°λ§, 리μ²λ ν¬λ¦, λν μ‘΄μ¨, μ‘΄ λΈλ¦¬μλμ€ β κ° κ·Έλ€μ κΈ°λ λΉμ μΈ μ μμΈ 'μ¬μ¬μ© κ°λ₯ν κ°μ²΄ μ§ν₯ μννΈμ¨μ΄μ μμ: λμμΈ ν¨ν΄(Design Patterns: Elements of Reusable Object-Oriented Software)'μμ λμ€ννμ΅λλ€. κ·Έλ€μ΄ μ΄ μμ΄λμ΄μ μ°½μμλ μλμ§λ§, λ§μ κΈ°λ³Έμ μΈ ν¨ν΄μ 체κ³ννκ³ λͺ©λ‘ννμ¬ μννΈμ¨μ΄ μ€κ³μλ€μ μν νμ€ μ΄νλ₯Ό ν립νμ΅λλ€.
μ λμμΈ ν¨ν΄μ μ¬μ©νλκ°?
λμμΈ ν¨ν΄μ μ¬μ©νλ©΄ λ€μκ³Ό κ°μ λͺ κ°μ§ μ£Όμ μ΄μ μ μ»μ μ μμ΅λλ€:
- μ½λ μ¬μ¬μ©μ± ν₯μ: ν¨ν΄μ λ€μν λ§₯λ½μ μ μ©ν μ μλ μ μ μλ ν΄κ²°μ± μ μ 곡νμ¬ μ½λ μ¬μ¬μ©μ μ΄μ§ν©λλ€.
- μ μ§λ³΄μμ± μ¦λ: ν립λ ν¨ν΄μ λ°λ₯΄λ μ½λλ μΌλ°μ μΌλ‘ μ΄ν΄νκ³ μμ νκΈ°κ° λ μ¬μ μ μ§λ³΄μ μ€ λ²κ·Έ λ°μ μνμ μ€μ λλ€.
- νμ₯μ± μ¦κ°: ν¨ν΄μ μ’ μ’ νμ₯μ± λ¬Έμ λ₯Ό μ§μ μ μΌλ‘ λ€λ£¨λ©°, λ―Έλμ μ±μ₯κ³Ό λ³ννλ μꡬμ¬νμ μμ©ν μ μλ ꡬ쑰λ₯Ό μ 곡ν©λλ€.
- κ°λ° μκ° λ¨μΆ: κ²μ¦λ ν΄κ²°μ± μ νμ©ν¨μΌλ‘μ¨ κ°λ°μλ€μ λ°ν΄λ₯Ό λ€μ λ°λͺ νλ κ²μ νΌνκ³ νλ‘μ νΈμ κ³ μ ν μΈ‘λ©΄μ μ§μ€ν μ μμ΅λλ€.
- μμ¬μν΅ κ°μ : λμμΈ ν¨ν΄μ κ°λ°μλ€μκ² κ³΅ν΅ μΈμ΄λ₯Ό μ 곡νμ¬ λ λμ μμ¬μν΅κ³Ό νμ μ μ΄μ§ν©λλ€.
- 볡μ‘μ± κ°μ: ν¨ν΄μ λκ·λͺ¨ μννΈμ¨μ΄ μμ€ν μ λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ κ΅¬μ± μμλ‘ λΆν΄νμ¬ λ³΅μ‘μ±μ κ΄λ¦¬νλ λ° λμμ μ€ μ μμ΅λλ€.
λμμΈ ν¨ν΄μ μ’ λ₯
λμμΈ ν¨ν΄μ μΌλ°μ μΌλ‘ μΈ κ°μ§ μ£Όμ μ νμΌλ‘ λΆλ₯λ©λλ€:
1. μμ± ν¨ν΄ (Creational Patterns)
μμ± ν¨ν΄μ κ°μ²΄ μμ± λ©μ»€λμ¦μ λ€λ£¨λ©°, μΈμ€ν΄μ€ν κ³Όμ μ μΆμννκ³ κ°μ²΄κ° μμ±λλ λ°©μμ μ μ°μ±μ μ 곡νλ κ²μ λͺ©νλ‘ ν©λλ€. μ΄λ κ°μ²΄ μμ± λ‘μ§μ κ°μ²΄λ₯Ό μ¬μ©νλ ν΄λΌμ΄μΈνΈ μ½λλ‘λΆν° λΆλ¦¬ν©λλ€.
- μ±κΈν΄(Singleton): ν΄λμ€κ° λ¨ νλμ μΈμ€ν΄μ€λ§ κ°λλ‘ λ³΄μ₯νκ³ μ΄μ λν μ μμ μΈ μ κ·Ό μ§μ μ μ 곡ν©λλ€. λνμ μΈ μλ λ‘κΉ μλΉμ€μ λλ€. λ μΌκ³Ό κ°μ μΌλΆ κ΅κ°μμλ λ°μ΄ν° νλΌμ΄λ²μκ° κ°μ₯ μ€μνλ©°, μ±κΈν΄ λ‘κ±°λ GDPRκ³Ό κ°μ κ·μ μ μ€μνλλ‘ λ―Όκ°ν μ 보μ λν μ κ·Όμ μ μ€νκ² μ μ΄νκ³ κ°μ¬νλ λ° μ¬μ©λ μ μμ΅λλ€.
- ν©ν 리 λ©μλ(Factory Method): κ°μ²΄λ₯Ό μμ±νκΈ° μν μΈν°νμ΄μ€λ₯Ό μ μνμ§λ§, μ΄λ€ ν΄λμ€λ₯Ό μΈμ€ν΄μ€νν μ§λ μλΈν΄λμ€κ° κ²°μ νλλ‘ ν©λλ€. μ΄λ μ»΄νμΌ μμ μ μ νν κ°μ²΄ μ νμ μ μ μμ λ μ μ©ν μ§μ°λ μΈμ€ν΄μ€νλ₯Ό νμ©ν©λλ€. ν¬λ‘μ€ νλ«νΌ UI ν΄ν·μ μκ°ν΄ 보μΈμ. ν©ν 리 λ©μλλ μ΄μ 체μ (μ: Windows, macOS, Linux)μ λ°λΌ μμ±ν μ μ ν λ²νΌμ΄λ ν μ€νΈ νλ ν΄λμ€λ₯Ό κ²°μ ν μ μμ΅λλ€.
- μΆμ ν©ν 리(Abstract Factory): ꡬ체μ μΈ ν΄λμ€λ₯Ό μ§μ νμ§ μκ³ λ κ΄λ ¨λκ±°λ μμ‘΄μ μΈ κ°μ²΄λ€μ ν¨λ°λ¦¬λ₯Ό μμ±νκΈ° μν μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€. μ΄λ μλ‘ λ€λ₯Έ μ»΄ν¬λνΈ μΈνΈ κ°μ μ½κ² μ νν΄μΌ ν λ μ μ©ν©λλ€. κ΅μ νλ₯Ό μκ°ν΄ 보μΈμ. μΆμ ν©ν 리λ μ¬μ©μμ λ‘μΌμΌ(μ: μμ΄, νλμ€μ΄, μΌλ³Έμ΄)μ λ°λΌ μ¬λ°λ₯Έ μΈμ΄μ μμμ κ°μΆ UI μ»΄ν¬λνΈ(λ²νΌ, λ μ΄λΈ λ±)λ₯Ό μμ±ν μ μμ΅λλ€.
- λΉλ(Builder): 볡μ‘ν κ°μ²΄μ μμ± κ³Όμ κ³Ό ννμ λΆλ¦¬νμ¬ λμΌν μμ± μ μ°¨λ‘ μλ‘ λ€λ₯Έ ννμ λ§λ€ μ μλλ‘ ν©λλ€. λμΌν 쑰립 λΌμΈ 곡μ μΌλ‘ λ€λ₯Έ λΆνμ μ¬μ©νμ¬ λ€μν μ νμ μλμ°¨(μ€ν¬μΈ μΉ΄, μΈλ¨, SUV)λ₯Ό λ§λλ κ²μ μμν΄ λ³΄μΈμ.
- νλ‘ν νμ (Prototype): νλ‘ν νμ μΈμ€ν΄μ€λ₯Ό μ¬μ©νμ¬ μμ±ν κ°μ²΄μ μ’ λ₯λ₯Ό λͺ μνκ³ , μ΄ νλ‘ν νμ μ 볡μ¬νμ¬ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±ν©λλ€. μ΄λ κ°μ²΄ μμ±μ΄ λΉμ©μ΄ λ§μ΄ λ€κ³ λ°λ³΅μ μΈ μ΄κΈ°νλ₯Ό νΌνκ³ μΆμ λ μ μ©ν©λλ€. μλ₯Ό λ€μ΄, κ²μ μμ§μ μΊλ¦ν°λ νκ²½ κ°μ²΄μ νλ‘ν νμ μ μ¬μ©νμ¬ μ²μλΆν° λ€μ λ§λλ λμ νμν λλ§λ€ 볡μ ν μ μμ΅λλ€.
2. ꡬ쑰 ν¨ν΄ (Structural Patterns)
ꡬ쑰 ν¨ν΄μ ν΄λμ€μ κ°μ²΄κ° λ ν° κ΅¬μ‘°λ₯Ό νμ±νκΈ° μν΄ μ΄λ»κ² ꡬμ±λλμ§μ μ΄μ μ λ§μΆ₯λλ€. μ΄λ μν°ν° κ°μ κ΄κ³μ μ΄λ₯Ό λ¨μννλ λ°©λ²μ λ€λ£Ήλλ€.
- μ΄λν°(Adapter): ν΄λμ€μ μΈν°νμ΄μ€λ₯Ό ν΄λΌμ΄μΈνΈκ° κΈ°λνλ λ€λ₯Έ μΈν°νμ΄μ€λ‘ λ³νν©λλ€. μ΄λ₯Ό ν΅ν΄ νΈνλμ§ μλ μΈν°νμ΄μ€λ₯Ό κ°μ§ ν΄λμ€λ€μ΄ ν¨κ» μλν μ μμ΅λλ€. μλ₯Ό λ€μ΄, XMLμ μ¬μ©νλ λ κ±°μ μμ€ν μ JSONμ μ¬μ©νλ μλ‘μ΄ μμ€ν κ³Ό ν΅ν©νκΈ° μν΄ μ΄λν°λ₯Ό μ¬μ©ν μ μμ΅λλ€.
- λΈλ¦¬μ§(Bridge): μΆμνμ κ·Έ ꡬνμ λΆλ¦¬νμ¬ λμ΄ λ 립μ μΌλ‘ λ³κ²½λ μ μλλ‘ ν©λλ€. μ΄λ μ€κ³μ μ¬λ¬ μ°¨μμ λ³νμ΄ μμ λ μ μ©ν©λλ€. λ€λ₯Έ λͺ¨μ(μ, μ¬κ°ν)κ³Ό λ€λ₯Έ λ λλ§ μμ§(OpenGL, DirectX)μ μ§μνλ 그리기 μ ν리μΌμ΄μ μ μκ°ν΄ 보μΈμ. λΈλ¦¬μ§ ν¨ν΄μ λͺ¨μ μΆμνμ λ λλ§ μμ§ κ΅¬νμ λΆλ¦¬νμ¬ λ€λ₯Έ νλμ μν₯μ μ£Όμ§ μκ³ μλ‘μ΄ λͺ¨μμ΄λ λ λλ§ μμ§μ μΆκ°ν μ μκ² ν©λλ€.
- μ»΄ν¬μ§νΈ(Composite): κ°μ²΄λ€μ νΈλ¦¬ κ΅¬μ‘°λ‘ κ΅¬μ±νμ¬ λΆλΆ-μ 체 κ³μΈ΅μ λνλ λλ€. μ΄λ₯Ό ν΅ν΄ ν΄λΌμ΄μΈνΈλ κ°λ³ κ°μ²΄μ κ°μ²΄μ ν©μ±μ λμΌνκ² μ²λ¦¬ν μ μμ΅λλ€. λνμ μΈ μλ νμΌκ³Ό λλ ν 리λ₯Ό νΈλ¦¬ ꡬ쑰μ λ Έλλ‘ μ²λ¦¬ν μ μλ νμΌ μμ€ν μ λλ€. λ€κ΅μ κΈ°μ μ λ§₯λ½μμ μ‘°μ§λλ₯Ό κ³ λ €ν΄ λ³΄μΈμ. μ»΄ν¬μ§νΈ ν¨ν΄μ λΆμμ μ§μμ κ³μΈ΅ ꡬ쑰λ₯Ό λνλ΄μ΄ κ°λ³ μ§μμ΄λ μ 체 λΆμμ λν΄ μμ (μ: μμ° κ³μ°)μ μνν μ μμ΅λλ€.
- λ°μ½λ μ΄ν°(Decorator): κ°μ²΄μ λμ μΌλ‘ μ± μμ μΆκ°ν©λλ€. μ΄λ κΈ°λ₯ νμ₯μ μν΄ μλΈν΄λμ±μ μ¬μ©νλ κ²μ λν μ μ°ν λμμ μ 곡ν©λλ€. UI μ»΄ν¬λνΈμ ν λ리, κ·Έλ¦Όμ, λ°°κ²½κ³Ό κ°μ κΈ°λ₯μ μΆκ°νλ κ²μ μμν΄ λ³΄μΈμ.
- νΌμ¬λ(Facade): 볡μ‘ν μλΈμμ€ν μ λν λ¨μνλ μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€. μ΄λ μλΈμμ€ν μ λ μ½κ² μ¬μ©νκ³ μ΄ν΄ν μ μκ² λ§λλλ€. κ°λ¨ν `compile()` λ©μλ λ€μ μ΄ν λΆμ, νμ±, μ½λ μμ±μ 볡μ‘μ±μ μ¨κΈ°λ μ»΄νμΌλ¬κ° κ·Έ μμ λλ€.
- νλΌμ΄μ¨μ΄νΈ(Flyweight): 곡μ λ₯Ό μ¬μ©νμ¬ μλ§μ μΈλΆνλ κ°μ²΄λ₯Ό ν¨μ¨μ μΌλ‘ μ§μν©λλ€. μ΄λ μΌλΆ κ³΅ν΅ μνλ₯Ό 곡μ νλ λ§μ μμ κ°μ²΄κ° μμ λ μ μ©ν©λλ€. ν μ€νΈ νΈμ§κΈ°λ₯Ό μκ°ν΄ 보μΈμ. νλΌμ΄μ¨μ΄νΈ ν¨ν΄μ λ¬Έμ κΈλ¦¬νλ₯Ό 곡μ νλ λ° μ¬μ©λμ΄ λ©λͺ¨λ¦¬ μλΉλ₯Ό μ€μ΄κ³ λμ©λ λ¬Έμλ₯Ό νμν λ μ±λ₯μ ν₯μμν¬ μ μμΌλ©°, νΉν μμ² κ°μ λ¬Έμκ° μλ μ€κ΅μ΄λ μΌλ³Έμ΄μ κ°μ λ¬Έμ μ§ν©μ λ€λ£° λ κ΄λ ¨μ΄ μμ΅λλ€.
- νλ‘μ(Proxy): λ€λ₯Έ κ°μ²΄μ λν μ κ·Όμ μ μ΄νκΈ° μν΄ κ·Έ κ°μ²΄μ λν λ리μΈμ΄λ νλ μ΄μ€νλλ₯Ό μ 곡ν©λλ€. μ΄λ μ§μ° μ΄κΈ°ν, μ κ·Ό μ μ΄, μ격 μ κ·Ό λ± λ€μν λͺ©μ μΌλ‘ μ¬μ©λ μ μμ΅λλ€. μΌλ°μ μΈ μλ μ΄κΈ°μ μ΄λ―Έμ§μ μ ν΄μλ λ²μ μ λ‘λν λ€μ νμν λ κ³ ν΄μλ λ²μ μ λ‘λνλ νλ‘μ μ΄λ―Έμ§μ λλ€.
3. νμ ν¨ν΄ (Behavioral Patterns)
νμ ν¨ν΄μ μκ³ λ¦¬μ¦κ³Ό κ°μ²΄ κ°μ μ± μ ν λΉμ κ΄ν κ²μ λλ€. μ΄λ κ°μ²΄λ€μ΄ μ΄λ»κ² μνΈμμ©νκ³ μ± μμ λΆλ°°νλμ§λ₯Ό νΉμ§μΌλ‘ ν©λλ€.
- μ± μ μ°μ(Chain of Responsibility): μμ²μ μ‘μ μμ μμ μ κ°μ κ²°ν©μ νΌνκΈ° μν΄ μ¬λ¬ κ°μ²΄μκ² μμ²μ μ²λ¦¬ν κΈ°νλ₯Ό μ€λλ€. μμ²μ νΈλ€λ¬ μ€ νλκ° μ²λ¦¬ν λκΉμ§ νΈλ€λ¬ 체μΈμ λ°λΌ μ λ¬λ©λλ€. 볡μ‘μ±μ λ°λΌ μμ²μ΄ λ€λ₯Έ μ§μ κ³μΈ΅μΌλ‘ λΌμ°ν λλ ν¬ν λ°μ€ν¬ μμ€ν μ μκ°ν΄ 보μΈμ.
- 컀맨λ(Command): μμ²μ κ°μ²΄λ‘ μΊ‘μννμ¬, ν΄λΌμ΄μΈνΈλ₯Ό λ€λ₯Έ μμ²μΌλ‘ λ§€κ°λ³μννκ³ , μμ²μ νμ λ£κ±°λ λ‘κ·Έμ κΈ°λ‘νλ©°, μ€ν μ·¨μ κ°λ₯ν μμ μ μ§μν μ μκ² ν©λλ€. κ° μμ (μ: μλΌλ΄κΈ°, 볡μ¬, λΆμ¬λ£κΈ°)μ΄ μ»€λ§¨λ κ°μ²΄λ‘ ννλλ ν μ€νΈ νΈμ§κΈ°λ₯Ό μκ°ν΄ 보μΈμ.
- μΈν°ν리ν°(Interpreter): μ£Όμ΄μ§ μΈμ΄μ λν΄ λ¬Έλ²μ λν ννκ³Ό κ·Έ ννμ μ¬μ©νμ¬ μΈμ΄μ λ¬Έμ₯μ ν΄μνλ μΈν°ν리ν°λ₯Ό ν¨κ» μ μν©λλ€. λλ©μΈ νΉν μΈμ΄(DSL)λ₯Ό λ§λλ λ° μ μ©ν©λλ€.
- μ΄ν°λ μ΄ν°(Iterator): μ§ν© κ°μ²΄μ λ΄λΆ ννμ λ ΈμΆνμ§ μκ³ κ·Έ μμμ μμ°¨μ μΌλ‘ μ κ·Όνλ λ°©λ²μ μ 곡ν©λλ€. μ΄λ λ°μ΄ν° 컬λ μ μ μννκΈ° μν κΈ°λ³Έμ μΈ ν¨ν΄μ λλ€.
- λ―Έλμμ΄ν°(Mediator): ν μΈνΈμ κ°μ²΄λ€μ΄ μνΈμμ©νλ λ°©μμ μΊ‘μννλ κ°μ²΄λ₯Ό μ μν©λλ€. μ΄λ κ°μ²΄λ€μ΄ μλ‘ λͺ μμ μΌλ‘ μ°Έμ‘°νλ κ²μ λ°©μ§νμ¬ λμ¨ν κ²°ν©μ μ΄μ§νκ³ κ·Έλ€μ μνΈμμ©μ λ 립μ μΌλ‘ λ³κ²½ν μ μκ² ν©λλ€. λ―Έλμμ΄ν° κ°μ²΄κ° λ€λ₯Έ μ¬μ©μλ€ κ°μ ν΅μ μ κ΄λ¦¬νλ μ±ν μ ν리μΌμ΄μ μ μκ°ν΄ 보μΈμ.
- λ©λ©ν (Memento): μΊ‘μνλ₯Ό μλ°νμ§ μμΌλ©΄μ κ°μ²΄μ λ΄λΆ μνλ₯Ό ν¬μ°©νκ³ μΈλΆννμ¬ λμ€μ μ΄ μνλ‘ κ°μ²΄λ₯Ό 볡μν μ μλλ‘ ν©λλ€. μ€ν μ·¨μ/λ€μ μ€ν κΈ°λ₯μ ꡬννλ λ° μ μ©ν©λλ€.
- μ΅μ λ²(Observer): κ°μ²΄ κ°μ μΌλλ€(one-to-many) μμ‘΄μ±μ μ μνμ¬ ν κ°μ²΄μ μνκ° λ³κ²½λλ©΄ λͺ¨λ μμ‘΄ κ°μ²΄λ€μ΄ μλμΌλ‘ μλ¦Όμ λ°κ³ μ λ°μ΄νΈλλλ‘ ν©λλ€. μ΄ ν¨ν΄μ UI νλ μμν¬μμ λ§μ΄ μ¬μ©λλ©°, κΈ°λ³Έ λ°μ΄ν° λͺ¨λΈ(주체)μ΄ λ³κ²½λ λ UI μμ(μ΅μ λ²)κ° μμ μ μ λ°μ΄νΈν©λλ€. μ£Όκ°(주체)κ° λ³κ²½λ λλ§λ€ μ¬λ¬ μ°¨νΈμ λμ€νλ μ΄(μ΅μ λ²)κ° μ λ°μ΄νΈλλ μ£Όμ μμ₯ μ ν리μΌμ΄μ μ΄ μΌλ°μ μΈ μμ λλ€.
- μν(State): κ°μ²΄μ λ΄λΆ μνκ° λ³κ²½λ λ κ·Έ νμλ₯Ό λ³κ²½ν μ μλλ‘ ν©λλ€. κ°μ²΄λ λ§μΉ ν΄λμ€κ° λ°λ κ²μ²λΌ 보μ λλ€. μ΄ ν¨ν΄μ μ νν μμ μνμ κ·Έ μ¬μ΄μ μ νμ κ°μ§ κ°μ²΄λ₯Ό λͺ¨λΈλ§νλ λ° μ μ©ν©λλ€. λΉ¨κ°, λ Έλ, λ Ήμκ³Ό κ°μ μνλ₯Ό κ°μ§ μ νΈλ±μ μκ°ν΄ 보μΈμ.
- μ λ΅(Strategy): μκ³ λ¦¬μ¦ ν¨λ°λ¦¬λ₯Ό μ μνκ³ , κ°κ°μ μΊ‘μννλ©°, μνΈ κ΅ν κ°λ₯νκ² λ§λλλ€. μ λ΅ ν¨ν΄μ μκ³ λ¦¬μ¦μ μ¬μ©νλ ν΄λΌμ΄μΈνΈλ‘λΆν° λ 립μ μΌλ‘ μκ³ λ¦¬μ¦μ λ³κ²½ν μ μκ² ν©λλ€. μ΄λ μμ μ μννλ μ¬λ¬ κ°μ§ λ°©λ²μ΄ μκ³ κ·Έ μ¬μ΄λ₯Ό μ½κ² μ ννκ³ μΆμ λ μ μ©ν©λλ€. μ μμκ±°λ μ ν리μΌμ΄μ μ λ€μν κ²°μ λ°©λ²(μ: μ μ©μΉ΄λ, PayPal, κ³μ’ μ΄μ²΄)μ μκ°ν΄ 보μΈμ. κ° κ²°μ λ°©λ²μ λ³λμ μ λ΅ κ°μ²΄λ‘ ꡬνλ μ μμ΅λλ€.
- ν νλ¦Ώ λ©μλ(Template Method): λ©μλμ μκ³ λ¦¬μ¦μ 골격μ μ μνκ³ μΌλΆ λ¨κ³λ₯Ό μλΈν΄λμ€μ μμν©λλ€. ν νλ¦Ώ λ©μλλ μλΈν΄λμ€κ° μκ³ λ¦¬μ¦μ ꡬ쑰λ₯Ό λ³κ²½νμ§ μκ³ μκ³ λ¦¬μ¦μ νΉμ λ¨κ³λ₯Ό μ¬μ μν μ μκ² ν©λλ€. λ³΄κ³ μ μμ±μ κΈ°λ³Έ λ¨κ³(μ: λ°μ΄ν° κ²μ, μμ μ§μ , μΆλ ₯)κ° ν νλ¦Ώ λ©μλμ μ μλκ³ μλΈν΄λμ€κ° νΉμ λ°μ΄ν° κ²μ λλ μμ λ‘μ§μ μ¬μ©μ μ μν μ μλ λ³΄κ³ μ μμ± μμ€ν μ μκ°ν΄ 보μΈμ.
- λΉμ§ν°(Visitor): κ°μ²΄ ꡬ쑰μ μμλ€μ λν΄ μνλ μμ μ λνλ λλ€. λΉμ§ν°λ μμ μ΄ μ μ©λλ μμλ€μ ν΄λμ€λ₯Ό λ³κ²½νμ§ μκ³ λ μλ‘μ΄ μμ μ μ μν μ μκ² ν©λλ€. 볡μ‘ν λ°μ΄ν° ꡬ쑰(μ: μΆμ ꡬ문 νΈλ¦¬)λ₯Ό μννλ©΄μ λ€λ₯Έ μ νμ λ Έλμ λν΄ λ€λ₯Έ μμ (μ: μ½λ λΆμ, μ΅μ ν)μ μννλ κ²μ μμν΄ λ³΄μΈμ.
λ€μν νλ‘κ·Έλλ° μΈμ΄μμμ μμ
λμμΈ ν¨ν΄μ μμΉμ μΌκ΄λκ² μ μ§λμ§λ§, κ·Έ ꡬνμ μ¬μ©λλ νλ‘κ·Έλλ° μΈμ΄μ λ°λΌ λ¬λΌμ§ μ μμ΅λλ€.
- μλ°(Java): GoFμ μμ λ μ£Όλ‘ C++κ³Ό μ€λͺ°ν ν¬λ₯Ό κΈ°λ°μΌλ‘ νμ§λ§, μλ°μ κ°μ²΄ μ§ν₯μ νΉμ± λλΆμ λμμΈ ν¨ν΄μ ꡬννκΈ°μ λ§€μ° μ ν©ν©λλ€. μΈκΈ° μλ μλ° νλ μμν¬μΈ μ€νλ§ νλ μμν¬λ μ±κΈν΄, ν©ν 리, νλ‘μμ κ°μ λμμΈ ν¨ν΄μ κ΄λ²μνκ² μ¬μ©ν©λλ€.
- νμ΄μ¬(Python): νμ΄μ¬μ λμ νμ΄νκ³Ό μ μ°ν ꡬ문μ λμμΈ ν¨ν΄μ κ°κ²°νκ³ ννλ ₯ μλ ꡬνμ κ°λ₯νκ² ν©λλ€. νμ΄μ¬μ μ½λ© μ€νμΌμ΄ λ€λ¦ λλ€. `@decorator`λ₯Ό μ¬μ©νμ¬ νΉμ λ©μλλ₯Ό λ¨μνν©λλ€.
- C#: C# λν κ°μ²΄ μ§ν₯ μμΉμ λν κ°λ ₯ν μ§μμ μ 곡νλ©°, λμμΈ ν¨ν΄μ .NET κ°λ°μμ λ리 μ¬μ©λ©λλ€.
- μλ°μ€ν¬λ¦½νΈ(JavaScript): μλ°μ€ν¬λ¦½νΈμ νλ‘ν νμ κΈ°λ° μμκ³Ό ν¨μν νλ‘κ·Έλλ° κΈ°λ₯μ λμμΈ ν¨ν΄ ꡬνμ μ κ·Όνλ λ€μν λ°©λ²μ μ 곡ν©λλ€. λͺ¨λ, μ΅μ λ², ν©ν 리μ κ°μ ν¨ν΄μ 리μ‘νΈ, μ΅κ·€λ¬, λ·°(Vue.js)μ κ°μ νλ‘ νΈμλ κ°λ° νλ μμν¬μμ μΌλ°μ μΌλ‘ μ¬μ©λ©λλ€.
νΌν΄μΌ ν μΌλ°μ μΈ μ€μ
λμμΈ ν¨ν΄μ μλ§μ μ΄μ μ μ 곡νμ§λ§, μ μ€νκ² μ¬μ©νκ³ μΌλ°μ μΈ ν¨μ μ νΌνλ κ²μ΄ μ€μν©λλ€:
- μ€λ² μμ§λμ΄λ§(Over-Engineering): ν¨ν΄μ λ무 μ΄λ₯΄κ±°λ λΆνμνκ² μ μ©νλ©΄ μ΄ν΄νκ³ μ μ§νκΈ° μ΄λ €μ΄ μ§λμΉκ² 볡μ‘ν μ½λκ° λ μ μμ΅λλ€. λ κ°λ¨ν μ κ·Ό λ°©μμ΄ μΆ©λΆνλ€λ©΄ ν¨ν΄μ μ΅μ§λ‘ ν΄κ²°μ± μ μ μ©νμ§ λ§μμμ€.
- ν¨ν΄μ λν μ€ν΄: ν¨ν΄μ ꡬννκΈ° μ μ ν΄λΉ ν¨ν΄μ΄ ν΄κ²°νλ λ¬Έμ μ μ μ© κ°λ₯ν λ§₯λ½μ μ² μ ν μ΄ν΄νμμμ€.
- μ₯λ¨μ 무μ: λͺ¨λ λμμΈ ν¨ν΄μλ μ₯λ¨μ μ΄ λ°λ¦ λλ€. μ μ¬μ μΈ λ¨μ μ κ³ λ €νκ³ νΉμ μν©μμ μ΄μ μ΄ λΉμ©λ³΄λ€ ν°μ§ νμΈνμμμ€.
- μ½λ 볡μ¬-λΆμ¬λ£κΈ°: λμμΈ ν¨ν΄μ μ½λ ν νλ¦Ώμ΄ μλλλ€. κΈ°λ³Έ μμΉμ μ΄ν΄νκ³ νΉμ μꡬμ λ§κ² ν¨ν΄μ μ‘°μ νμμμ€.
GoFλ₯Ό λμ΄μ
GoF ν¨ν΄μ΄ μ¬μ ν κΈ°μ΄μ μ΄μ§λ§, λμμΈ ν¨ν΄μ μΈκ³λ κ³μν΄μ μ§ννκ³ μμ΅λλ€. λμμ± νλ‘κ·Έλλ°, λΆμ° μμ€ν , ν΄λΌμ°λ μ»΄ν¨ν κ³Ό κ°μ λΆμΌμ νΉμ κ³Όμ λ₯Ό ν΄κ²°νκΈ° μν΄ μλ‘μ΄ ν¨ν΄μ΄ λ±μ₯νκ³ μμ΅λλ€. κ·Έ μλ λ€μκ³Ό κ°μ΅λλ€:
- CQRS (Command Query Responsibility Segregation): μ±λ₯ λ° νμ₯μ± ν₯μμ μν΄ μ½κΈ° λ° μ°κΈ° μμ μ λΆλ¦¬ν©λλ€.
- μ΄λ²€νΈ μμ±(Event Sourcing): μ ν리μΌμ΄μ μνμ λͺ¨λ λ³κ²½ μ¬νμ μ΄λ²€νΈ μνμ€λ‘ μΊ‘μ²νμ¬ ν¬κ΄μ μΈ κ°μ¬ λ‘κ·Έλ₯Ό μ 곡νκ³ μ¬μ λ° μκ° μ¬νκ³Ό κ°μ κ³ κΈ κΈ°λ₯μ νμ±νν©λλ€.
- λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²(Microservices Architecture): μ ν리μΌμ΄μ μ μκ³ λ 립μ μΌλ‘ λ°°ν¬ κ°λ₯ν μλΉμ€λ€μ μ§ν©μΌλ‘ λΆν΄νλ©°, κ° μλΉμ€λ νΉμ λΉμ¦λμ€ κΈ°λ₯μ λ΄λΉν©λλ€.
κ²°λ‘
λμμΈ ν¨ν΄μ μννΈμ¨μ΄ κ°λ°μμκ² νμμ μΈ λꡬλ‘, μΌλ°μ μΈ μ€κ³ λ¬Έμ μ λν μ¬μ¬μ© κ°λ₯ν μ루μ μ μ 곡νκ³ μ½λ νμ§, μ μ§λ³΄μμ±, νμ₯μ±μ μ¦μ§ν©λλ€. κ°λ°μλ€μ λμμΈ ν¨ν΄μ κΈ°λ³Έ μμΉμ μ΄ν΄νκ³ μ μ€νκ² μ μ©ν¨μΌλ‘μ¨ λ κ²¬κ³ νκ³ μ μ°νλ©° ν¨μ¨μ μΈ μννΈμ¨μ΄ μμ€ν μ ꡬμΆν μ μμ΅λλ€. κ·Έλ¬λ νΉμ λ§₯λ½κ³Ό μ₯λ¨μ μ κ³ λ €νμ§ μκ³ λ§Ήλͺ©μ μΌλ‘ ν¨ν΄μ μ μ©νλ κ²μ νΌν΄μΌ ν©λλ€. λμμμ΄ μ§ννλ μννΈμ¨μ΄ κ°λ° νκ²½μ λ°λ§μΆκΈ° μν΄μλ μλ‘μ΄ ν¨ν΄μ λν μ§μμ μΈ νμ΅κ³Ό νκ΅¬κ° νμμ μ λλ€. μ±κ°ν¬λ₯΄μμ μ€λ¦¬μ½ 밸리μ μ΄λ₯΄κΈ°κΉμ§, λμμΈ ν¨ν΄μ μ΄ν΄νκ³ μ μ©νλ κ²μ μννΈμ¨μ΄ μν€ν νΈμ κ°λ°μμκ² λ³΄νΈμ μΈ κΈ°μ μ λλ€.